// 'use strict'

import axios from 'axios'
// import router from '../../router';
// import qs from 'qs'
import {
  Dialog
} from "vant";
import router from '@/router'

axios.interceptors.request.use(config => {
  // loading
  return config
}, error => {
  return Promise.reject(error)
})

axios.interceptors.response.use(response => {
  if ((response.data.code === '1' && response.data.msg === '请登录')) {
    Dialog.alert({
      message: "登录失效，请重新登录！"
    }).then(() => {
      localStorage.removeItem('userInfo')
      router.push({
        name: 'login'
      })
    });
    return
  }
  return response
}, error => {
  // router.push({ path: "/404" , component: () => import('@/components/404.vue')});
  // eslint-disable-next-line no-console
  return Promise.resolve(error.response)
})

function checkStatus(response) {
  // loading
  // 如果http状态码正常，则直接返回数据
  if (response && (response.status === 200)) {
    return response
    // 如果不需要除了data之外的数据，可以直接 return response.data
  }
  if (response && (response.status === 0)) {
    return response
    // 如果不需要除了data之外的数据，可以直接 return response.data
  }
  // 异常状态下，把错误信息返回
  let statusNum = response.status
  let message = '网络异常'

  if (response.status === 404) {
    message = '未找到，服务器找不到请求的网页'
  } else if (response.status === 503) {
    message = '服务不可用，服务器目前无法使用（由于超载或停机维护）'
  } else if (response.status === 100) {
    message = '继续，请data.求者应当继续提出请求'
  } else if (response.status === 101) {
    message = '切换协议，请求者已要求服务器切换协议，服务器已确认并准备切换'
  } else if (response.status === 400) {
    message = '错误请求，服务器不理解请求的语法'
  } else if (response.status === 401) {
    message = '未授权，请求要求身份验证'
  } else if (response.status === 403) {
    message = '禁止，服务器拒绝请求'
  } else if (response.status === 405) {
    message = '方法禁用，禁用请求中指定的方法'
  } else if (response.status === 406) {
    message = '不接受，无法使用请求的内容特性响应请求的网页'
  } else if (response.status === 407) {
    message = '需要代理授权，指定请求者应当授权使用代理'
  } else if (response.status === 408) {
    message = '请求超时，服务器等候请求时发生超时'
  } else if (response.status === 409) {
    message = '冲突，服务器在完成请求时发生冲突'
  } else if (response.status === 410) {
    message = '已删除，请求的资源已永久删除'
  } else if (response.status === 411) {
    message = '需要有效长度，服务器不接受不含有效内容长度标头字段的请求'
  } else if (response.status === 412) {
    message = '未满足前提条件，服务器未满足请求者在请求中设置的其中一个前提条件'
  } else if (response.status === 413) {
    message = '请求实体过大，服务器无法处理请求，因为请求实体过大，超出服务器的处理能力'
  } else if (response.status === 414) {
    message = '请求的 URI（通常为网址）过长，服务器无法处理'
  } else if (response.status === 415) {
    message = '不支持的媒体类型，请求的格式不受请求页面的支持'
  } else if (response.status === 416) {
    message = '页面无法提供请求的范围'
  } else if (response.status === 417) {
    message = '未满足期望值，服务器未满足”期望”请求标头字段的要求'
  } else if (response.status === 500) {
    message = '服务器内部错误，服务器遇到错误，无法完成请求'
  } else if (response.status === 501) {
    message = '尚未实施，服务器不具备完成请求的功能'
  } else if (response.status === 502) {
    message = '错误网关，服务器作为网关或代理，从上游服务器收到无效响应'
  } else if (response.status === 504) {
    message = '网关超时，服务器作为网关或代理，但是没有及时从上游服务器收到请求'
  } else if (response.status === 505) {
    message = 'HTTP 版本不受支持，服务器不支持请求中所用的 HTTP 协议版本'
  }
  return {
    state: {
      state: statusNum,
      msg: message
    }
  }
}

export default {
  all(urls, data) {
    let posts = []
    for (let i = 0; i < urls.length; i++) {
      posts.push(axios({
        method: 'post',
        url: process.env.VUE_APP_BASE_API + urls[i],
        data: JSON.stringify(data[i]),
        timeout: 20000,
        headers: {
          'Content-Type': 'application/json;charset=utf-8'
        }
      }))
    }
    if (posts === null || posts.length <= 0) {
      return checkStatus({
        State: 400,
        msg: '组装数据失败'
      })
    }
    return axios.all(posts).then((response) => {
      return response
    }).catch(
      (res) => {
        return checkStatus(res)
      }
    )
  },
  post(url, data, headers) {
    return axios({
      method: 'POST',
      url: process.env.VUE_APP_BASE_API + url,
      data: JSON.stringify(data),
      timeout: 20000,
      headers: {
        ...headers,
        'Content-Type': 'application/json;charset=utf-8'
      }
    }).then(
      (response) => {
        return response.data
      }
    ).catch(
      (res) => {
        return checkStatus(res)
      }
    )
  },
  put(url, data) {
    return axios({
      method: 'PUT',
      url: process.env.VUE_APP_BASE_API + url,
      data: JSON.stringify(data),
      timeout: 20000,
      headers: {
        'Content-Type': 'application/json;charset=utf-8'
      }
    }).then(
      (response) => {
        return response.data
      }
    ).catch(
      (res) => {
        return checkStatus(res)
      }
    )
  },
  delete(url, data) {
    return axios({
      method: 'DELETE',
      url: process.env.VUE_APP_BASE_API + url,
      data: JSON.stringify(data),
      timeout: 20000,
      headers: {
        'Content-Type': 'application/json;charset=utf-8'
      }
    }).then(
      (response) => {
        return response.data
      }
    ).catch(
      (res) => {
        return checkStatus(res)
      }
    )
  },
  get(url, params) {
    return axios({
      method: 'get',
      url: process.env.VUE_APP_BASE_API + url,
      params, // get 请求时带的参数
      timeout: 20000,
      headers: {
        'X-Requested-With': 'XMLHttpRequest'
      }
    }).then(
      (response) => {
        return response.data
      }
    ).catch(
      (res) => {
        return checkStatus(res)
      }
    )
  }
}